<?php
// 应用公共文件

use app\common\service\AuthService;
use app\common\service\WeginService;
use think\facade\Cache;

if (!function_exists('__url')) {

    /**
     * 构建URL地址
     * @param string $url
     * @param array $vars
     * @param bool $suffix
     * @param bool $domain
     * @return string
     */
    function __url(string $url = '', array $param = [], $suffix = true, $domain = false)
    {
        // 应用 模块 方法
        $contro = request()->controller();
        // 微擎框架自带参数
        $weParam = request()->only(['i', 'c', 'a', 'eid', 'version_id', 'do', 'm'], 'get');
        // 路由参数          
        $route = explode('/', $url ?? ''); // ?? 处理编辑器报红
        // parse_name 控制器驼峰命名转为下划线分隔命名
        $path = [];
        switch (count($route)) {
            case 1: // u('index')
                $path = ['', parse_name($contro), $route[0]];
                break;
            case 2: // u('index/index')
                $path = ['', parse_name($route[0]), $route[1]];
                break;
            case 3:
                $path = ['', parse_name($route[1]), $route[2]];
                break;
        } 
        $s = implode('/', $path);
        $url = request()->domain() . request()->baseFile() . '?' . queryString($weParam) . '&s=' . $s;
        if (!empty($param )) $url .= '&' . queryString($param );
        return $url; 
    }
}

if (!function_exists('getTableName')) {
    /**
     * 将数组数据转为查询字符串
     */
    function getTableName($data)
    {
        return  $data;
    }
}

if (!function_exists('queryString')) {
    /**
     * 将数组数据转为查询字符串
     */
    function queryString($data)
    {
        $link = '';
        foreach ($data as $key => $value) {
            $link .= $key . '=' . trim($value) . '&';
        }
        return rtrim($link, '&');
    }
}


if (!function_exists('password')) {

    /**
     * 密码加密算法
     * @param $value 需要加密的值
     * @param $type  加密类型，默认为md5 （md5, hash）
     * @return mixed
     */
    function password($value)
    {
        $value = sha1('kbwdl_') . md5($value) . md5('_encrypt') . sha1($value);
        return sha1($value);
    }

}

if (!function_exists('xdebug')) {

    /**
     * debug调试
     * @deprecated 不建议使用，建议直接使用框架自带的log组件
     * @param string|array $data 打印信息
     * @param string $type 类型
     * @param string $suffix 文件后缀名
     * @param bool $force
     * @param null $file
     */
    function xdebug($data, $type = 'xdebug', $suffix = null, $force = false, $file = null)
    {
        !is_dir(runtime_path() . 'xdebug/') && mkdir(runtime_path() . 'xdebug/');
        if (is_null($file)) {
            $file = is_null($suffix) ? runtime_path() . 'xdebug/' . date('Ymd') . '.txt' : runtime_path() . 'xdebug/' . date('Ymd') . "_{$suffix}" . '.txt';
        }
        file_put_contents($file, "[" . date('Y-m-d H:i:s') . "] " . "========================= {$type} ===========================" . PHP_EOL, FILE_APPEND);
        $str = (is_string($data) ? $data : (is_array($data) || is_object($data)) ? print_r($data, true) : var_export($data, true)) . PHP_EOL;
        $force ? file_put_contents($file, $str) : file_put_contents($file, $str, FILE_APPEND);
    }
}

if (!function_exists('sysconfig')) {

    /**
     * 获取系统配置信息
     * @param $group
     * @param null $name
     * @return array|mixed
     */
    function sysconfig($group, $name = null)
    {
        $where = ['group' => $group];
        $uniacid = WeginService::getUniacid();
        $value = empty($name) ? Cache::get("sysconfig{$uniacid}_{$group}") : Cache::get("sysconfig{$uniacid}_{$group}_{$name}");
        if (empty($value)) {
            if (!empty($name)) {
                $where['name'] = $name;
                $value = \app\admin\model\SystemConfig::where($where)->value('value');
                Cache::tag('sysconfig')->set("sysconfig{$uniacid}_{$group}_{$name}", $value, 3600);
            } else {
                $value = \app\admin\model\SystemConfig::where($where)->column('value', 'name');
                Cache::tag('sysconfig')->set("sysconfig{$uniacid}_{$group}", $value, 3600);
            }
        }
        return $value;
    }
}

if (!function_exists('array_format_key')) {

    /**
     * 二位数组重新组合数据
     * @param $array
     * @param $key
     * @return array
     */
    function array_format_key($array, $key)
    {
        $newArray = [];
        foreach ($array as $vo) {
            $newArray[$vo[$key]] = $vo;
        }
        return $newArray;
    }

}

if (!function_exists('auth')) {

    /**
     * auth权限验证
     * @param $node
     * @return bool
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    function auth($node = null)
    {
        $authService = new AuthService(session('admin.id'));
        $check = $authService->checkNode($node);
        return $check;
    }

}

/**/
if (!function_exists('editor_textarea')) {
    function editor_textarea( $detail, $name = 'desc', $placeholder = '请输入', $edit_type='ueditor')
    {

       $ed = [
            'ckeditor' => "<textarea name='{$name}' rows='20' class='layui-textarea editor' placeholder='{$placeholder}'>{$detail}</textarea>",
            'ueditor' => "<script type='text/plain' id='{$name}' name='{$name}' class='editor' data-content='{$detail}'></script>",
            'EasyMDE' => "<textarea id='{$name}' class='editor' name='{$name}'>{$detail}</textarea>",
            'wangEditor' => "<div class='wangEditor_div'><textarea name='{$name}' rows='20' class='layui-textarea editor layui-hide'>{$detail}</textarea><div id='editor_toolbar_{$name}'></div><div id='editor_{$name}' style='height: 300px'></div></div>",
        ];
       return $ed[$edit_type] ?? $ed['ckeditor'];
    }
}

if (!function_exists('img_alt')) {
    function img_alt($content, $alt = '')
    {
        if (empty($content)) {
            return $content;
        }
        try {
            // 将 HTML 解析为 DOM
            $dom = new DOMDocument();
            // 使用 UTF-8 编码处理特殊字符
            $dom->loadHTML(mb_convert_encoding(html_entity_decode($content), 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
            // 获取所有的 img 标签
            $images = $dom->getElementsByTagName('img');
            // 遍历每个 img 标签
            foreach ($images as $image) {
                // 如果 img 标签没有 alt 属性，添加 alt 属性
                if (!$image->hasAttribute('alt') || $image->getAttribute('alt') === '') {
                    $image->setAttribute('alt', $alt);
                }
                //图片路径补全域名
                $src = $image->getAttribute('src');
                if (strpos($src, 'http://') === false && strpos($src, 'https://') === false) {
                    $image->setAttribute('src', request()->domain() . $src);
                }

            }
            // 返回修改后的 HTML 内容
            return $dom->saveHTML();
        } catch (Exception $e) {
            return $content;
        }
    }
}
if (!function_exists('get_full_url')) {
    function get_full_url($src)
    {
        global $_W;
        $src = trim($src);
        if (empty($src)) {
            return '';
        }
        if ('//' == substr($src, 0, 2)) {
            return 'http:' . $src;
        }
        if (('http://' == substr($src, 0, 7)) || ('https://' == substr($src, 0, 8))) {
            return $src;
        }
        return $_W['siteroot'] . trim($src, "/");
    }
}

if (!function_exists('format_visual_sales')) {
    function format_visual_sales($number)
    {
        if ($number >= 1000 && $number < 10000) {
            // 将数字转换为千位计数法
            $formatted = number_format($number / 1000) . '千+';
        } elseif ($number >= 10000) {
            // 将数字转换为百万位计数法
            $formatted = number_format($number / 10000) . '万+';
        } else if( $number > 100){
            // 小于1000直接显示
            $formatted = $number;
        }else{
            $formatted = "<100";
        }
        return $formatted;
    }
}